拆解思想工具

原文:Unbundling Tools for Thought

简而言之:

  • 思想工具承诺让你将所有数据集中化并建立超链接。

  • 实践中,95% 的使用场景都可以很自然地被拆解到不同的独立应用中,而缺乏集中化管理和跨应用超链接并无任何实质性的负面影响。

游戏开发圈里有个笑话,说游戏开发者分两种:一种是写引擎的,一种是做游戏的。写引擎的人,纯粹是为了享受智力上的愉悦——探索由向量、场景、实体和事件构成的优美代数,并欣赏一台精密如水晶般的机器优雅运转。至于真正的游戏——那个永远也完不成、甚至很少开工的游戏——不过是事后才想到的添头。当然了,你才不会去做一个游戏。那样格局就小了。引擎本身才是重点。而那些真想做游戏的人,只会下载 Unity,然后硬着头皮熬过那段痛苦的经历。

在过去十年里,我大概写了六七个个人维基。这其实是一种高级到不可思议的拖延症[1]。时至今日,我几乎把所有可能的设计方案都试了个遍。

  1. 生命周期: 我构建过几个编译器风格的维基:将 git 仓库里的纯文本文件静态编译成 HTML。也用实时服务器和服务器端渲染的方式做过几个。最新的一个,则是一个带 React 前端的 API 服务器。

  2. 存储: 一开始我用 git 仓库里的纯文本文件,后来换成了结构简单的 SQLite 数据库。最新版本则是一个在 SQLite 基础上实现的、堪称前卫的面向对象超媒体数据库,支持双向链接。

  3. 标记语言: 我断断续续用过 Markdown。后来我自创了一门受 TeX 启发的标记语言。再后来我试了 XML,效果好坏参半。最新版本用的是基于 ProseMirror 开发的所见即所得(WYSIWYG)编辑器。

但我却并不用这些工具。为什么呢?诚然,创造它们的过程充满乐趣,但一个个人数据库总得有点实用价值吧。

起初我以为问题在于「阻力」:使用一个工具所需的启动能量越高,你使用它的可能性就越低。哪怕只有一点点阻力,都可能让我觉得,哦,谁在乎呢,懒得折腾了。因此,我的每个新版本都朝着更「顺滑」的方向改进[2]。最新版本用上了基于 ProseMirror 构建的所见即所得编辑器(我可是做了巨大的思想斗争才向所见即所得妥协的)。它还内置了通往每日笔记页面的链接,让写日记更方便。唯一的阻力,就只剩下点击浏览器书签访问 localhost:5000 了。从打开到进入每日笔记,毫不夸张地说,只需两次点击

可我还是不用它。这又是为什么?比起几年前,我现在做事有条理多了。我的文件系统结构清晰,所有文件都各归其位。我完全有能力去填充一个个人维基的内容。

我最终得出结论:这毫无意义。因为个人维基能做的所有事,用专门的应用都能做得更好,而剩下那为数不多的用途又根本没用。我们来逐一分析。

拆解

以下这些使用场景,都很自然地可以分离开来:

  • 写日记: 在我的个人维基里,86% 的节点都是日记。这些日记待在那里其实大多毫无意义,它们几乎不被任何其他内容链接。我有一种错误的观念,觉得为了证明这番投入物有所值,就必须使用这个应用,所以就该每天都用它。而每天最显而易见能做的事,就是写一篇每日记录,比如记下今天的任务和一些随感。日记条目很少会链接到别的内容,即便有,也纯属偶然。

  • 待办事项清单: 我过去常常在个人维基的每日记录里写待办事项。但这种方式非常简陋:重复任务、截止日期、提醒功能怎么办?现在,我成了一名 Todoist 的忠实用户(它至少让我的效率提升了 150%),并且再也不想回头了。

  • 学习: 如果你在学习某样东西,可以把笔记记在思想工具里。这是它最大的用途之一。但问题从来不在于记笔记,而在于复习笔记。这些年来我发现,长篇大论的课堂笔记几乎毫无用处,不仅因为你得按时记得去复习,更因为「间隔重复」完全可以取代所有课堂笔记。制作出好的间隔重复卡片需要练习和自律,但一旦你掌握了,那些长篇的文字笔记本身就显得多余了。

    我也试过先写笔记以确保自己理解了,然后再把它们转换成抽认卡。但我发现,通常情况下,这只是平白增加了一层阻力,并无益处。[3]

    我还发现,做长篇的学习笔记本身就是一种拖延。我会开始重新组织标题,摆弄 LaTeX 公式,想让一切看起来既美观又有条理,力求把概念结构梳理得尽善尽美,这样未来的我——那个已经忘光了一切的我——在重读笔记时,就能因为其清晰的呈现方式而轻松地重新掌握信息。这本身就是一种失败主义的规划。「间隔重复」的效果好得惊人,当你掌握了制作适合自己的抽认卡的技巧后,效果更佳。

    RemNote 将长篇笔记和抽认卡结合在同一个界面里。结果是,两边都显得一团糟。

  • 联系人: 如果你为某个人建了一个页面,记录了他们的信息,那么你就可以链接到他们:比如在日记或会议记录里提到他们时。我发现这毫无意义。你心里清楚 [[John Doe]] 指的是谁。用 Google Contacts 或电子表格就够了。

  • 小说创作: 我最初确实是在个人维基里开始写《格利泽 581 的顿悟》的,把片段和章节放在不同的页面里。但我很快就转移到了一个使用 Markdown 文件的 git 仓库,因为 1) 我可以将零散的文件编译成一个单独的 PDF 或 HTML 文件来审阅,以及 2) 对于写作项目而言,使用 git 进行版本控制(而不是我个人维基自带的变更追踪)要合理得多。

    你可能会说,我本可以留在个人维基里,只要实现「内容嵌入」(transclusion)功能(把所有片段组合到一个视图中)并改进版本控制的用户界面就行了。但这个建议可以同样应用到我用个人思想工具处理的每一个功能不足的领域:为 X 功能写个插件就好了。结果就是工作量变得无穷无尽,而收益却虚无缥缈。最后你得到的会是一个摇摇欲坠的结构,插件一层叠一层地架在你的思想工具之上,而用户体验通常会因此被「凌迟处死」。

  • 流程笔记: 例如「如何在 Docker 里做 X」。我经常需要写这类笔记,但总想不好该放在哪里。但这不应算是思想工具的真正用途,因为流程笔记之间几乎没有建立链接的必要。所以,这只是个给它们在文件系统或某个笔记应用里找个位置的问题。

  • 整理法律文件: 比如移民文件或体检报告。在实践中,一个像样的文件夹结构和几张电子表格就足够了。

  • 清单: 记录你拥有的物品、认识的人、住过的地方、教育经历、工作履历,以及生活中林林总总的杂事。电子表格处理这些绰绰有余,而且极少有真正需要从一个清单链接到另一个的需求。

那还剩下什么呢?

  • 收藏管理: 在这个领域,软件解决方案出奇地匮乏。

    我有一个 Calibre 书库用来管理书籍。我有一个 Zotero 文献库用来管理论文。我有时会考虑把前者并入后者,因为 Zotero 更通用,界面也更清爽,但并没有这么做的迫切需求。我还有存放音乐、游戏、互动小说游戏、RPG 规则书 PDF、桌游规则书 PDF 和艺术作品的文件夹。

    用文件系统来组织收藏品很困难,因为文件系统是层级结构的[4]:我应该把《纳米系统》归类到「化学」、「Eric Drexler」、「教科书」还是「1992」?我应该把《美人鱼》归类到「John William Waterhouse」、「绘画」、「爱德华时代」还是「前拉斐尔派艺术」?任何一种分类方式都有其道理,而任何一种分类方式都会让按其他方案浏览变得更困难[5]。我需要标签,也就是说:我需要一个数据库。

    而在应用领域存在一个空白,本应有一款能整合 Calibre 及其他类似工具的应用,但莫名其妙地,它就是不存在[6]。而且它应该是什么样子,是如此显而易见。

    它本质上应该是一个拥有精美界面的 SQLite 前端。你可以定义记录模板(比如「书籍」、「人物」、「歌曲」或「论文」),模板包含带类型的字段(例如「标题:字符串」、「PDF:文件」、「作者:作者链接列表」,字段类型可以是字符串或日期等简单数据,也可以是到其他记录的链接、链接列表,或是星级评分等等),然后向你的收藏中添加记录。你可以把记录放进层级文件夹,但也能通过搜索和标签来检索它们。

    最接近这个概念的是一个叫 Tellico 的 KDE 应用,但我从没听说有谁在用它。

当你把所有那些用专门应用或普通文件夹结构就能更好地处理的事情都排除掉之后,剩下的就只有收藏管理了。所以,与其去构建一个个人维基,我应该去构建一个「通用版的 Calibre」。

规模的无用性

我常常好奇:别人都用他们的个人知识库做什么?于是我翻阅博客和论坛,看那些 ObsidianRoam 的重度用户分享他们的配置。结果我看到的大多是些垃圾玩意儿。这些系统从来没能成为下一个范内瓦·布什的卡片盒笔记法(Zettelkasten),而总是一套安装了几十个插件、每日笔记长达三页、又细分成五十个子页面来记录生活中各种鸡毛蒜皮琐事的臃肿系统。这简直是通往「倦怠」的捷径。

人们心中总有一个雄心勃勃的想法,渴望构建一个庞大到令人窒息、内部盘根错节的知识图谱,以至于它几乎能映射出他们大脑中的每一个独立概念和记忆。我能理解这种极致主义的诱惑。但他们完全算错了账。你知识图谱里的每个节点都是一笔负债。每条链接的负债更是加倍。你拥有的越多,你的赤字就越严重。每一个真正有用的节点——书中有趣的摘录、精辟的引言、一首诗、小说的片段、几句能萌发成未来文章的句子、作为项目起点的链接列表——都被淹没在平庸的汪洋大海中。我们的大多数念头都是转瞬即逝的,这自有其道理。

单一图谱的谬误

有一种普遍的观念认为,思想工具——一种带有双向链接的超媒体数据库——可以成为一个关于「你」的通用数据库,其他应用则可以通过插件构建在这份数据之上。这么做有两个好处:

  1. 数据集中化: 所有东西都集中存放,而不是散落在你的文件系统、Dropbox 以及六个不同专有应用的数据库里。

  2. 无处不链接: 你可以随心所欲地链接你的数据:

    1. 将间隔重复卡片链接到相应的理论笔记。

    2. 将日期元数据链接到当天的日记。

    3. 将日历事件链接到任务、日期、人物和项目。

Obsidian 就是这么做的:为此它拥有大约 700 个插件。有待办事项清单插件、日历集成插件、间隔重复插件,应有尽有。

其主要缺点在于,这个基于插件的应用生态,其用户体验永远比不上那些为特定领域量身打造的应用。很少有应用能把插件系统做好。体验总是很蹩脚[7]。

但最主要的缺点是:你根本不需要它。将所有数据用超链接串联成一个巨大图谱,这个想法很美好,但在实践中,完全没有必要。各种信息在独立的应用程序里待得好好的。扪心自问,你有多频繁地需要把待办事项清单里的一个任务,链接到 Dropbox 里的一个文件?即便你真的构建起了这个庞大的链接网络:每条链接被实际访问的频率又有多高?

(题外话:在互联网上,链接反映的是潜力,这合情合理,因为你不知道读者会想点开什么。但在个人数据库里,链接更应该遵从于使用:它们应该是你实际探索路径的凝练,而不是你在使用前就强加于系统的预设结构。)

反对这种做法的最后一个论据是可行性。Tiago Forte 写道

……你总是需要用多个程序来完成项目。你也许会用像 Basecamp、Asana、Jira 或 Zoho 这样的中心化平台,但技术在太多前沿上发展得太快,没有任何一家公司能在所有功能上都做到最好。

他说得完全正确,除非你想基于你的思想工具重写整个世界。所谓的「单一图谱数据库」是一种毫无产出、一元论式的执念。

最后补充一点:我发现自己维基里超过 80% 的链接本质上都是结构性的,它们基本只是在模拟文件夹结构。其余的则是「随手引用」式的链接:比如我写日记时提到正在做项目 X,于是出于一种模糊的责任感,我得把东西都链接起来,就加上了项目 X 的链接。这毫无意义。

那种认为超链接具有「启发性」,可以顺着它在信息的随机碰撞中发现新想法的观念,主要适用于互联网,而非内容全由你一人编写的个人数据库。

我目前的维基

我当前个人维基的主页

(图中的文字引自《渐速:Crescendo》。)

大多数思想工具的自然演化终点,是一个支持将富文本作为列类型的关系型数据库。所以我做的基本上就是这个:一个构建在 SQLite 之上的面向对象图数据库。

我目前的个人维基叫 Cartesian(名字来源于笛卡尔剧场,因为我最初的设想要宏大得多)。其核心概念很简单:对象、类和链接。

  1. 对象是数据库中的节点:它们有全局唯一的标题和一组属性,属性是带类型的键值对。

  2. 每个对象都遵循一个类,类定义了它拥有的属性及其类型。属性类型可以是:富文本、文件链接、布尔值、到另一个对象的链接,或链接列表。

  3. 链接从一个对象的属性指向另一个对象(不支持块引用)。这部分很多灵感来自 Notion。

大多数个人维基只是这种模式的一个特例,即只有一个类,且该类只有一个文本属性。所以毫不意外,我最常用的类是 Note,它只有一个名为 Text 的富文本属性。

起初,我想为管理书目和其它收藏品创建不同的类,例如:

  1. 一个

Book

类,用来取代 Calibre,包含如下字段:

1.  `Authors`:一个指向作者对象的链接列表(得益于双向链接,访问作者页面时,会显示所有链接到该页面的对象,即该作者的所有作品)。

2.  `PDF`:一个文件链接。
  1. 一个 Paper 类,用来取代 Zotero,包含你所期望的那些字段。

  2. 一个 Art 类,用来管理我的艺术品收藏,包含 Artist(艺术家)、Year(年份)、Period(时期)、Genre(流派)、File(文件)等字段。

  3. 一些用来组织法律文件的类,比如一个 Document 类,包含一个文件属性和一个用于备注的文本属性。

但我绝大多数时候只是用它来写日记和一些简短的文本笔记,比如我的日记:

我的个人维基截图,展示了一篇日记。

以及学习笔记:

我的个人维基截图,展示了关于群论的学习笔记。

另一张关于群论学习笔记的截图。

下面这个例子展示了如何用它来组织艺术品收藏:

我的个人维基截图,展示了约翰·威廉·沃特豪斯的画作《伊阿宋与美狄亚》的条目,包含了艺术家、媒介、时期、图片文件和年份等字段。

将它作为「唯一数据库」的障碍在于:

  1. 启动成本: 将所有东西从我的文件系统、Calibre、Zotero、浏览器书签等处迁移过来,是一项浩大的工程。哪怕只是把 Calibre 的数据迁移过来,都得写个脚本才能完成,因为我的 Calibre 书库实在太庞大了。

  2. 用户界面: 要想取代文件系统和我大部分的专用应用,这个维基的用户界面必须做到顶级。它需要支持搜索、筛选、排序,以及用不同模式(列表、表格、画廊等,就像 Notion 那样)查看对象集合。要将用户体验打磨到那个「顺滑」的最佳平衡点,从而能高效地使用,需要投入大量时间。

  3. 整理工作的徒劳无功: 我的 Calibre 和 Zotero 书库都乱七八糟。但这很糟糕吗?整理它们有意义吗?我总能找到我需要的东西,要么通过搜索,要么通过浏览,因为我对每本书在 Calibre 那个大网格视图里的位置有种空间感。就算我把 Calibre 和 Zotero 里的所有条目都过一遍,修正标题、补上缺失的作者、出版商、出版年份、修复封面图片——然后呢?我得到了什么?什么都没有。过度整理纯属浪费时间。

  4. 不确定的回报: 世上没有银弹。很可能,在我付出一系列巨大努力迁移完所有数据、并构建出一个精美的用户界面后,得到的结果却会令人大失所望。

结论

在抵达「幻灭的低谷」之后,下一步该怎么走?我想,我也许会把 Cartesian 整理一下,将它作为一款「通用版 Calibre」发布,献给那些想要管理自己各种零散收藏的人。

又或者,我可能会着手写我的第八个个人维基。毕竟,在写这篇文章的时候,我又冒出了一大堆新点子。所以,我大概会在假期里匀出点时间,重操旧业,再次把那块巨石推上山顶。

脚注

  1. 上大学那会儿,我本该复习课堂笔记,却跑去构建个人维基,好让自己能记下更好、更结构化的课堂笔记。

  2. 举个例子:XML 的严谨能让我的强迫症感到舒适,而且它的可扩展性也让添加新功能变得更容易[8],但写起来却痛苦不堪,尤其是当你只想快速记下几个要点时。用 Markdown,你只需写:


- foo

- bar

- baz

而等效的 XML 却是:

<ul>

    <li>

        <p>

            foo

        </p>

    </li>

    <li>

        <p>

            bar

        </p>

    </li>

    <li>

        <p>

            baz

        </p>

    </li>

</ul>

等你敲完这莎士比亚式的冗长独白,你最初想记录的思路早就烟消云散了。与此同时,在另一个埃弗雷特分支里,你那个更聪明、使用 Markdown 的分身早已写完笔记,并着手干正事去了;而你,还在为你那 DTD 模式水晶般清澈的严谨性、那**无与伦比的可扩展性**而沾沾自喜。
  1. 有时,为了理解某个事物,我会用一张小草稿纸来梳理我的心智模型,直到弄懂为止,然后再把它做成抽认卡。但这里的关键区别在于:这个过程没有两大阶段,不会先写完所有文字笔记,再把它们全部转成抽认卡。这就像敏捷开发与瀑布模型的区别:笔记应该尽早变成抽认卡,而不是等到所有笔记都记完之后再动手。

  2. 这篇博文极好地阐述了层级文件系统的困难与局限。

  3. 如果你打算建议我用符号链接,或者——饶了我吧——某些基于 FUSE 的标签文件系统之类的东西,求你千万别。我这可是满怀善意地忠告你。我已经不是 17 岁的愣头青了,没时间在那折腾:「妈,帮我把今天剩下的事都推了,我的 ZFS 又崩了!」。我不希望我的思维工具是个内核驱动程序,我只想要简单和便携。

  4. Notion 在这方面其实做得不错,只可惜要一个个上传好几 G 大小的 PDF 文件实在太不方便了。但如果一个工具要成为我的「第二大脑」,那它就不能寄存在别人的电脑上。

  5. 我正是因此从 Anki 换到了 Mochi:Mochi 开箱即用的功能,在 Anki 里需要插件才能实现,而管理 Anki 的插件极其痛苦,插件的用户界面还老出问题。Mochi 功能虽少,但界面更美观(Anki 简直丑得惨不忍睹)。而界面体验胜过功能数量,因为间隔重复的关键在于培养习惯,为此,良好的用户体验必不可少。

  6. 我的某个个人维基就利用了这一点。它有个 <graphviz> 元素,你可以在里面输入 .dot 文件的内容,它就会自动渲染成 PNG 图片并显示在页面上。理论上,这能让你更轻松地创建思维导图之类的东西,而不必先单独创建 .dot 文件,再手动存为 PNG,然后添加到维基里并嵌入。然而我一次也没用过。